package cc.zy.base.businesses.service;

import cc.zy.base.businesses.entity.NoticeUser;
import cc.zy.base.common.entity.QueryRequest;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 通知人表 Service接口
 *
 * @author guozhikun
 * @date 2021-01-27
 */
public interface INoticeUserService extends IService<NoticeUser> {

    /**
     * 查询（分页）
     *
     * @param request 查询条件
     * @param noticeUser 通知人对象，用于传递条件
     * @param noticeId 通知id
     * @return 分页
     */
    IPage<NoticeUser> findNoticeUsers(QueryRequest request, NoticeUser noticeUser, Integer noticeId);

    /**
     * 查询（分页）公海
     *
     * @param request 查询条件
     * @param noticeUser 通知人对象，用于传递条件
     * @param noticeId 通知id
     * @return 分页
     */
    IPage<NoticeUser> findNoticeUsersPool(QueryRequest request, NoticeUser noticeUser, Integer noticeId);

    /**
     * 通知人数
     *
     * @param noticeId  通知id
     * @return long
     */
    long countNoticeUser(Integer noticeId);

    /**
     * 通知人数
     *
     * @param noticeId  通知id
     * @return long
     */
    long countNoticeUserPool(Integer noticeId);

    /**
     * 通知已读人数
     *
     * @param noticeId 通知id
     * @return  int
     */
    int countNoticeUserRead(Integer noticeId);

    /**
     * 通知已读人数
     *
     * @param noticeId 通知id
     * @return  int
     */
    int countNoticeUserReadPool(Integer noticeId);

    /**
     * 修改已读状态接口 ****
     *
     * @param noticeId 通知id
     * @param openId 前台传入id
     * @return int
     */
    int updateNoticeUserRead(Integer noticeId, String openId);


    /**
     * 修改通知之删除通知
     *
     * @param noticeId 通知id
     * @return int
     */
    int delectNoticeUserByNoticeId(Integer noticeId);

    /**
     * 修改通知之删除通知
     *
     * @param noticeId 通知id
     * @return int
     */
    int delectNoticeUserPoolByNoticeId(Integer noticeId);

    /**
     * 修改通知之增加通知
     *
     * @param noticeUser 通知人对象，用于传递条件
     * @return int
     */
    int insertNoticeUserByNoticeId(NoticeUser noticeUser);

    /**
     * 修改通知之增加通知
     *
     * @param noticeUser 通知人对象，用于传递条件
     * @return int
     */
    int insertNoticeUserPoolByNoticeId(NoticeUser noticeUser);

    /**
     * 导出通知详情全部信息
     *
     * @param noticeId 通知id
     * @return  List<NoticeUser>
     */
    List<NoticeUser> findNoticeUserList(Integer noticeId);

}
